$(function(){
    function GetMetricsDictionary(area_id, caller) {
		var area = $('#'+area_id);
		var vdiv = area_id+'Tab';

		area.html('<div id="'+vdiv+'Pager"></div><table id="'+vdiv+'"></table>');

		var pager_id = '#' + vdiv + 'Pager';
        var pager = $(pager_id);
        var gritab;
        var col_order = [0, 1, 2];
        var col_names = ['ID', 'Аббревиатура', 'Полное название'];
        var col_model = [
		    { name: 'id', index: 'met_id', hidden: true, width: 50, editable: false, fixed: true },
		    { name: 'met_name', index: 'met_name', hidden: false, width: 100, editable: true, 
                    editoptions: { maxlength: "16", style: "width:95%;min-width:100px;"}, formoptions: { label: '', 
					elmprefix: '<div class="jqg-form-label-up">Аббревиатура</div>'}},
		    { name: 'met_full', index: 'met_full', hidden: false, width: 200, editable: true, 
                    editoptions: { maxlength: "64", style: "width:95%;min-width:100px;margin-bottom:16px;"}, 
					formoptions: { label: '', elmprefix: '<div class="jqg-form-label-up">Полное название</div>'} }
        ];
        var jqgo = {
            url: 'index.php',
            editurl: 'index.php',
            datatype: 'json',
            postData: { q: 'metrics/index' },
            emptyrecords: true,
            autowidth: false,
            gridview: true,
            hidegrid: false,
            hoverrows: true,
            recordpos: 'right',
            scrollrows: true,
            multiselect: true,
            multiselectWidth: 40,
            multiboxonly: true,
            mtype: 'POST',
            shrinkToFit: false,
            colNames: col_names,
            colModel: col_model,
            page: 1,
            pager: pager,
            pagerpos: 'right',
            rowNum: 15,
            rowList: [15, 45, 150],
            loadui: 'disable',
            toolbar: [false, 'top'],
            filterbar: false,
            height: area.innerHeight() - 75,
            width: area.innerWidth() - 2,
            sortname: 'met_name',
            sortorder: 'asc',
            sortable: true,
            caption: '',
            loadError: function (xhr, status, error) {
                alert("Ошибка загрузки даных");
            },
            loadComplete: function (data) {
                switch( data.userdata.errcode ) {
                    case 0:
                        break;
                    case 999:    
                        alert("Ваша сессия закончилась по таймауту.\nПожалуйста перерегистрируйтесь.");
                        break;
                    case 99:    
                        app.alert('AlertDlg', 'Ошибка', data.userdata.errmess, 'app-icon-stop32', caller.Close );
                        break;
                    default:
                        alert( data.userdata.errmess );
                        break;
                }                
            },
            ondblClickRow: function (id) {
                $('#' + vdiv).jqGrid('editGridRow', id,
                {
                    modal: true,
                    jqModal: true,
                    zIndex: app.jqgrid_form_min_z_index,
					resize: false,
                    closeOnEscape: true,
                    savekey: [true, 13],
                    editData: { q: 'metrics/update' },
                    afterShowForm: function () { $('div#editmod' + vdiv).shadow() },
                    afterSubmit: responseOnSubmit,
                    viewPagerButtons: false,
                    closeAfterEdit: true
                }
                );
            }
        };
        // Создадим jqGrid
        gritab = $('#' + vdiv).jqGrid(jqgo);

		// Индикация серверных ошибок добавления, ред., удал.
        function responseOnSubmit(response, postdata) {
            var rsp = $.parseJSON(response.responseText);
            var success = true;
            var msg = '';

            if (rsp.errcode) {
                success = false;
                msg = rsp.errmess;
            }
				
            return [success, msg];
        }

// Напоминание о выборе строки
		function selRowPlease() {
			app.alert('AlertDlg', 'Внимание', "Пожалуйста, выберите строку в таблице.", 'app-icon-stop32');
		}
	
// Навигатор - создаем панель инструментов
        gritab.jqGrid('navGrid', pager_id, {
				add:false,del:false,edit:false,view:false,search:false,refresh:false });
        
// Пользовательский навигатор - создать
        gritab.jqGrid('navButtonAdd', pager_id, {
            caption: '',
            title: 'Создать запись',
            buttonicon: 'ui-icon-plus',
            onClickButton: function() { 
				gritab.jqGrid('editGridRow', 'new', {
                    modal: true,
                    jqModal: true,
                    zIndex: app.ui_dialog_min_z_index+1,
					resize: false,
                    closeOnEscape: true,
                    editData: { q: 'metrics/insert' },
                    afterShowForm:  function () { $('div#editmod' + vdiv).shadow() },
                    afterSubmit: responseOnSubmit,
                    closeAfterAdd: false
				});
			}
        });
// Пользовательский навигатор - редактирование
        gritab.jqGrid('navButtonAdd', pager_id, {
            caption: '',
            title: 'Редактировать выбранную запись',
            buttonicon: 'ui-icon-pencil',
            onClickButton: function() { 
				var curr_id = gritab.getGridParam('selrow');
				if( !curr_id ) { selRowPlease(); return; }
				gritab.jqGrid('editGridRow', curr_id, {
                    modal: true,
                    jqModal: true,
                    zIndex: app.ui_dialog_min_z_index+1,
					resize: false,
                    savekey: [true, 13],
                    closeOnEscape: true,
                    editData: { q: 'metrics/update' },
                    afterShowForm:  function () { $('div#editmod' + vdiv).shadow() },
                    afterSubmit: responseOnSubmit,
                    viewPagerButtons: false,
                    closeAfterEdit: true,
				});
			}
        });
// Пользовательский навигатор - удаление
        gritab.jqGrid('navButtonAdd', pager_id, {
            caption: '',
            title: 'Удаление выбранной записи',
            buttonicon: 'ui-icon-trash',
            onClickButton: function() { 
				var rowlist = gritab.getGridParam('selarrrow').toString();
				if( !rowlist ) { selRowPlease(); return; }
				gritab.jqGrid('delGridRow', rowlist, {
                    modal: true,
                    jqModal: true,
                    width: 250,
					msg: '<table style="width:240px;margin-top:16px;"><tr><td style="width:50px;">'+
							'<div class="app-icon-quest32"></div></td><td>Удалить выбранную запись(и) ?</td></tr></table>',
					resize: false,
                    zIndex: app.ui_dialog_min_z_index+1,
                    closeOnEscape: true,
                    delData: { q: 'metrics/delete' },
                    afterShowForm: function() { $('div#delmod' + vdiv).shadow() },
                    afterSubmit: responseOnSubmit
				});
			}
        });
// Пользовательский навигатор - обновить
		gritab.jqGrid('navButtonAdd',pager_id,{
			caption: '',
			title: 'Обновить таблицу',
			buttonicon: 'ui-icon-refresh',
			onClickButton: function() { gritab.trigger("reloadGrid"); }
		});    

// Делаем ширину панели кнопок максимальной
		$('td#'+area_id+'TabPager_center').width(2);
		
// Включаем панель поиска
        gritab.filterToolbar({ searchOnEnter: false, afterSearch: function () { } });

		this.Destroy = function() {
			gritab.GridDestroy(vdiv);
//			area.find('*').remove();
			area.empty();
		};
		this.Resize = function() {
			gritab.setGridWidth( area.innerWidth() - 2 );
			gritab.setGridHeight( area.innerHeight() - 75 );
		}

    };  // End of create function definition


    app.ShowMetricsDictionary = function (dlgID) {
        var oTab;
        var aldlg = $('#' + dlgID);
		var me = this;

        if ($('#' + dlgID + 'Tab').length) return;

        aldlg.dialog(
        {
            modal: false, title: 'Справочник единиц измерения',
            height: 450, width: 376,
			closeOnEscape: true,			
            autoOpen: false,
            resizable: true,
			resize: function( e, ui ) { oTab.Resize(); },
            open: function () { 
				oTab = new GetMetricsDictionary(dlgID, me);
				$('div[aria-describedby="' + dlgID + '"]').shadow() 
			},
            close: function () {
                if (oTab) oTab.Destroy();
                aldlg.dialog("destroy");
            }
        });

		this.Close = function() { aldlg.dialog('close'); };

        aldlg.dialog('open');
    }
});
